﻿using System;
using System.Collections.Generic;

namespace PsTFS.Objects
{
    /// <summary>
    /// Classe permettant de loguer les évenements
    /// </summary>
    public class Log
    {
        /// <summary>
        /// Permet de savoir si on enregistre les logs oou pas
        /// </summary>
        public static bool LoggingEnabled { get; set; }
        /// <summary>
        /// Date du log
        /// </summary>
        public DateTime Date { get; set; }
        /// <summary>
        /// Personne à l'origine du log
        /// </summary>
        public String Owner { get; set; }
        /// <summary>
        /// Message à loguer
        /// </summary>
        public String Message { get; set; }
        /// <summary>
        /// Event à l'origine du log
        /// </summary>
        public EventArgs EventArgs { get; set; }

        /// <summary>
        /// Liste contenant tous les logs
        /// </summary>
        private static readonly List<Log> Logs = new List<Log>();

        /// <summary>
        /// Permet d'ajouter un log dans PsTFS
        /// </summary>
        /// <param name="e">Event qui à déclancher le log</param>
        /// <param name="msg">Message d'erreur</param>
        public static void AddLog(EventArgs e, string msg)
        {
            if (LoggingEnabled)
            {
                var l = new Log { Date = DateTime.Now, EventArgs = e, Message = msg, Owner = Context.Instance.User };
                Logs.Add(l);
            }
        }

        /// <summary>
        /// Permet de nétoyer les log de PsTFS
        /// </summary>
        /// <returns></returns>
        public static void ClearLog()
        {
            Logs.Clear();
        }

        /// <summary>
        /// Permet de visioner les logs
        /// </summary>
        /// <returns>Liste contenant des objets PsLog</returns>
        public static IEnumerable<Log> GetLog()
        {
            return Logs;
        }

        /// <summary>
        /// Ajout d'un log hors evennement
        /// </summary>
        /// <param name="msg">Message à loguer</param>
        public static void AddLog(string msg)
        {
            AddLog(null, msg);
        }
    }
}
